package com.gimi.cloud.jimi.manage.service.sys;

import com.gimi.cloud.jimi.dto.sys.SysMenuDTO;
import com.gimi.cloud.jimi.dto.sys.SysRoleDTO;
import com.gimi.cloud.jimi.dto.params.MenuSingleParams;

import java.util.List;
import java.util.Map;

/**
 * Created by wangwei on 2017/12/15.
 */
public interface MenuService {

//    /**
//     * 获取菜单列表
//     * @return 所有未删除的菜单
//     */
//    List<SysMenuDTO> getMenuList();



    SysMenuDTO getMenuSingle(MenuSingleParams params);

//    /**
//     * 获取某个角色的菜单列表
//     * @param roleId 角色id
//     * @return 菜单列表
//     */
//    List<SysMenuDTO> getMenuListByRoleId(Integer roleId);

    /**
     * 2018/1/29 修改，此方法由于界面改造，暂时废弃，改为getMenuListReturnAll（）方法
     * 根据父类id获取系统菜单列表
     * @param menuDTO
     * @return
     */
    List<SysMenuDTO> getMenuListByPid(SysMenuDTO menuDTO);

    /**
     * 2018/1/29 添加
     * 返回所有的菜单，树形结构
     * @return
     */
    List<SysMenuDTO> getMenuListReturnAll();

//    /**
//     * 获取菜单树
//     * @param allList 总list
//     * @param authList 有权限的list
//     * @return
//     */
//    List<SysMenuDTO> getMenuTree(List<SysMenuDTO> allList,List<SysMenuDTO> authList);

    /**
     * 菜单添加
     * @param menuDTO
     * @return
     */
    Boolean menuAdd(SysMenuDTO menuDTO);

    /**
     * 菜单新增
     * @param menuDTO
     * @return
     */
    Boolean menuUpdate(SysMenuDTO menuDTO);

    /**
     * 菜单删除
     * @param meId
     * @return
     */
    Boolean menuDelete(SysMenuDTO meId);

//    /**
//     * 把list改成树形结构
//     */
//    List<SysMenuDTO> sortMenu(List<SysMenuDTO> rootMenu);
    /**
     * 根据用户获取菜单权限
     * @param dto
     * @param maId 管理员id
     * @return 该管理员拥有的菜单权限
     * @throws Exception
     */
    List<SysMenuDTO> getMenuByMasterId(SysMenuDTO dto, Integer maId) ;

    /**
     * 把传入的菜单转化为tree
     * @param menuDTOS 待转化的菜单集合
     * @return 转化后的菜单集合
     * @throws Exception
     */
    List<SysMenuDTO> menuToTree(List<SysMenuDTO> menuDTOS);

    /**
     * 获取拥有的权限字符串
     * @param dto
     * @param menus 当前已有权限的菜单信息
     * @return 处理结果(permissions:权限字符串，serviceNames：服务名)
     * @throws Exception
     */
    Map<String,Object> getPermissions(SysMenuDTO dto, List<SysMenuDTO> menus);

    /**
     * 根据角色id获取菜单信息（hasAuth：是否有该菜单的权限）
     * @param dto
     * @param roId 角色id
     * @return 查询结果
     * @throws Exception
     */
    List<SysMenuDTO> getMenuByRoId(SysMenuDTO dto, Integer roId) ;


}
